package org.sfgeeq.framework.helper;

import org.sfgeeq.framework.util.ReflectionUtil;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

/**
 * Bean 助手类
 * 获取所有被框架管理的BEAN类。因此需要如下操作
 * 1、调用ClassHelper类中睥getBeanClassSet方法
 * 2、循环调用ReflectionUtil类的newInstance方法
 * 3、根据类来实例化对象，最后将每次创建的对象存放在静态MAP<Class<?>,Object>中
 *
 * Created by vmuser010 on 2016/8/26.
 */
public final class BeanHelper {

    private static final Map<Class<?>,Object> BEAN_MAP= new HashMap<Class<?>, Object>();
    static {
//        1、调用ClassHelper类中睥getBeanClassSet方法
        Set<Class<?>> beanClassSet=ClassHelper.getBeanClassSet();
//        2、循环调用ReflectionUtil类的newInstance方法
        for(Class<?> b:beanClassSet){
//            3、根据类来实例化对象，最后将每次创建的对象存放在静态MAP<Class<?>,Object>中
            Object obj= ReflectionUtil.newInstance(b);
            BEAN_MAP.put(b,obj);
        }
    }

    /**
     * 获取BEAN映射
     * @return
     */
    public static Map<Class<?>,Object> getBeanMap(){
        return BEAN_MAP;
    }

    public static <T> T getBean(Class<T> cls){
        if(!BEAN_MAP.containsKey(cls)){
            throw new  RuntimeException("can not get bean by class（没有找到这个类）:+cls");
        }
        return (T) BEAN_MAP.get(cls);
    }


}
